package com.seedwill.common.meta;

import java.util.List;

/**
 * 环境
 * 
 * 环境既可能是一个元数据也可能是一个执行体
 * 
 * 环境中包括很多执行器
 * 当执行器复合可执行元数据需求，则可对此元数据执行
 * 
 * @author kdyi
 *
 */
public interface IContext extends IData, IAspectExecutor {
	/**
	 * 取得父环境
	 * 
	 * @return
	 */
	public IContext getParentContext();
	
	/**
	 * 设置父环境
	 * @param parent
	 */
	public void setParentContext(IContext parent);
	
	/**
	 * 获取参考环境
	 * @return
	 */
	public List<IContext> getReferContextList();
	/**
	 * 设置参考环境
	 * @param list
	 */
	public void setReferContextList(List<IContext> list);
	
	/**
	 * 增加参考环境
	 * @param ctx
	 */
	public void addReferContext(IContext ctx);
	/**
	 * 清除参考环境
	 * @param ctx
	 */
	public void removeReferContext(IContext ctx);
	/**
	 * 清除参考环境
	 */
	public void cleanReferContext();
	/**
	 * 查询参考环境
	 * @param cate
	 * @return
	 */
	public List<IContext> searchReferContextList(String cate);
	/**
	 * 获取执行体
	 * @return
	 */
	public List<IAspectExecutor> getExcutorList();
	/**
	 * 查询执行体
	 * @param cate
	 * @return
	 */
	public List<IAspectExecutor> searchExcutorList(String cate);
	/**
	 * 增加执行体
	 * @param ctx
	 */
	public void addExecutor(IAspectExecutor ctx);
	/**
	 * 清除执行体
	 * @param ctx
	 */
	public void removeExecutor(IAspectExecutor ctx);
	/**
	 * 清除执行体
	 */
	public void cleanExecutor();
	
	/**
	 * 取得数据
	 * @return
	 */
	public List<IData> getDataList();
	/**
	 * 查询数据
	 * @param cate
	 * @return
	 */
	public List<IData> searchDataList(String cate);
	/**
	 * 设置数据
	 * @param datas
	 */
	public void setDataList(List<IData> datas);
	
	/**
	 * 取得主要数据
	 * @return
	 */
	public IData getMainData();
	
	/**
	 * 设置主要数据
	 * @param mainData
	 */
	public void setMainData(IData mainData);
}
